package com.wsestadio.dao.base;

 import java.util.HashMap; 
 import java.util.List; 
 import java.util.Map; 
 import java.util.Map.Entry; 
 import javax.persistence.Query; 
 import java.util.Date; 
 import com.wsestadio.dominio.Responsable; 
 import javax.persistence.EntityManager; 
 
 public class ResponsableDAOBase {

private EntityManager em;


   public ResponsableDAOBase(EntityManager em) { 
        this.em = em; 
    }

  	public List getQuery(String sqlQuery , Map<String, Object> map) throws Exception {	
				Query q = em.createQuery(sqlQuery);	
				for (Entry<String, Object> entry : map.entrySet()){	
   				System.out.println(entry.getKey() + "/" + entry.getValue());	
    				q.setParameter(entry.getKey(), entry.getValue());	
				}			
				return q.getResultList();	
		}		

  	public Object getSingleQuery(String sqlQuery , Map<String, Object> map) throws Exception {	
				Query q = em.createQuery(sqlQuery);	
				for (Entry<String, Object> entry : map.entrySet()){	
   				System.out.println(entry.getKey() + "/" + entry.getValue());	
    				q.setParameter(entry.getKey(), entry.getValue());	
				}			
				return q.getSingleResult();		
		}		
   public static Map<String, Object> getNewMap(){  		return new HashMap<String, Object>();    }

public List<Responsable> getListaResponsableByActivo(Boolean activo, String campoOrder, String order) throws Exception{
          Map map = getNewMap();
                  map.put("activo", activo); 
          String query = " select p from Responsable p  where p.activo = :activo  " ;	
          if( (campoOrder!=null) && (!campoOrder.equals("")) && (campoOrder.length()>0) ) {
            query += " order by " + campoOrder + " "+ order ;    
          }  
          query += " ; ";    
          List<Responsable> p = getQuery( query ,map);
          if(p!=null){
				return p;
			}else{
				throw new Exception("No hay regsitros.");
			}  
     }
   public Integer countResponsableByActivo(Boolean activo) throws Exception{
          Map map = getNewMap();
                  map.put("activo", activo); 
          String query = " select count(p) from Responsable p  where p.activo = :activo ; " ;	
          Integer p = (Integer) getSingleQuery( query ,map);
		  return p;
     }
   public List<Responsable> getListaResponsableBetweenFechaRegistro(Date fechaRegistroInicio , Date fechaRegistroFin, String campoOrder, String order) throws Exception{
          Map map = getNewMap();
                  map.put("fechaRegistroInicio", fechaRegistroInicio);
   map.put("fechaRegistroFin", fechaRegistroFin); 
          String query = " select p from Responsable p  where p.fechaRegistro between :fechaRegistroInicio and fechaRegistroFin  " ;	
          if( (campoOrder!=null) && (!campoOrder.equals("")) && (campoOrder.length()>0) ) {
            query += " order by " + campoOrder + " "+ order ;    
          }  
          query += " ; ";    
          List<Responsable> p = getQuery( query ,map);
          if(p!=null){
				return p;
			}else{
				throw new Exception("No hay regsitros.");
			}  
     }
   public Integer countResponsableBetweenFechaRegistro(Date fechaRegistroInicio , Date fechaRegistroFin) throws Exception{
          Map map = getNewMap();
                  map.put("fechaRegistroInicio", fechaRegistroInicio);
   map.put("fechaRegistroFin", fechaRegistroFin); 
          String query = " select count(p) from Responsable p  where p.fechaRegistro between :fechaRegistroInicio and fechaRegistroFin ; " ;	
          Integer p = (Integer) getSingleQuery( query ,map);
		  return p;
     }
   public List<Responsable> getListaResponsableBetweenFechaActualizada(Date fechaActualizadaInicio , Date fechaActualizadaFin, String campoOrder, String order) throws Exception{
          Map map = getNewMap();
                  map.put("fechaActualizadaInicio", fechaActualizadaInicio);
   map.put("fechaActualizadaFin", fechaActualizadaFin); 
          String query = " select p from Responsable p  where p.fechaActualizada between :fechaActualizadaInicio and fechaActualizadaFin  " ;	
          if( (campoOrder!=null) && (!campoOrder.equals("")) && (campoOrder.length()>0) ) {
            query += " order by " + campoOrder + " "+ order ;    
          }  
          query += " ; ";    
          List<Responsable> p = getQuery( query ,map);
          if(p!=null){
				return p;
			}else{
				throw new Exception("No hay regsitros.");
			}  
     }
   public Integer countResponsableBetweenFechaActualizada(Date fechaActualizadaInicio , Date fechaActualizadaFin) throws Exception{
          Map map = getNewMap();
                  map.put("fechaActualizadaInicio", fechaActualizadaInicio);
   map.put("fechaActualizadaFin", fechaActualizadaFin); 
          String query = " select count(p) from Responsable p  where p.fechaActualizada between :fechaActualizadaInicio and fechaActualizadaFin ; " ;	
          Integer p = (Integer) getSingleQuery( query ,map);
		  return p;
     }
   public List<Responsable> getListaResponsableLikeCodigoUsuario(String codigoUsuario, String campoOrder, String order) throws Exception{
          Map map = getNewMap();
                  map.put("codigoUsuario","%"+ codigoUsuario+"%"); 
          String query = " select p from Responsable p  where p.codigoUsuario like :codigoUsuario  " ;	
          if( (campoOrder!=null) && (!campoOrder.equals("")) && (campoOrder.length()>0) ) {
            query += " order by " + campoOrder + " "+ order ;    
          }  
          query += " ; ";    
          List<Responsable> p = getQuery( query ,map);
          if(p!=null){
				return p;
			}else{
				throw new Exception("No hay regsitros.");
			}  
     }
   public Integer countResponsableLikeCodigoUsuario(String codigoUsuario) throws Exception{
          Map map = getNewMap();
                  map.put("codigoUsuario","%"+ codigoUsuario+"%"); 
          String query = " select count(p) from Responsable p  where p.codigoUsuario like :codigoUsuario ; " ;	
          Integer p = (Integer) getSingleQuery( query ,map);
		  return p;
     }
   public List<Responsable> getListaResponsableLikeNombre(String nombre, String campoOrder, String order) throws Exception{
          Map map = getNewMap();
                  map.put("nombre","%"+ nombre+"%"); 
          String query = " select p from Responsable p  where p.nombre like :nombre  " ;	
          if( (campoOrder!=null) && (!campoOrder.equals("")) && (campoOrder.length()>0) ) {
            query += " order by " + campoOrder + " "+ order ;    
          }  
          query += " ; ";    
          List<Responsable> p = getQuery( query ,map);
          if(p!=null){
				return p;
			}else{
				throw new Exception("No hay regsitros.");
			}  
     }
   public Integer countResponsableLikeNombre(String nombre) throws Exception{
          Map map = getNewMap();
                  map.put("nombre","%"+ nombre+"%"); 
          String query = " select count(p) from Responsable p  where p.nombre like :nombre ; " ;	
          Integer p = (Integer) getSingleQuery( query ,map);
		  return p;
     }
   public List<Responsable> getListaResponsableLikeUuid(String uuid, String campoOrder, String order) throws Exception{
          Map map = getNewMap();
                  map.put("uuid","%"+ uuid+"%"); 
          String query = " select p from Responsable p  where p.uuid like :uuid  " ;	
          if( (campoOrder!=null) && (!campoOrder.equals("")) && (campoOrder.length()>0) ) {
            query += " order by " + campoOrder + " "+ order ;    
          }  
          query += " ; ";    
          List<Responsable> p = getQuery( query ,map);
          if(p!=null){
				return p;
			}else{
				throw new Exception("No hay regsitros.");
			}  
     }
   public Integer countResponsableLikeUuid(String uuid) throws Exception{
          Map map = getNewMap();
                  map.put("uuid","%"+ uuid+"%"); 
          String query = " select count(p) from Responsable p  where p.uuid like :uuid ; " ;	
          Integer p = (Integer) getSingleQuery( query ,map);
		  return p;
     }
} 